'use strict';

yjx.factory('$fetch', ['$q', '$http', '$rootScope', '$timeout', 'ipCookie', '$init',  'modalService',
    function ($q, $http, $rootScope, $timeout, ipCookie, $init,  modalService) {
        return {
            fetch: function (api, extraOptions) {
                //后端地址
                var options = {
                    type: {},
                    cache: true,
                    dataType: 'JSONP',
                    params: {}
                };
                api = api != '' ? api : ''; //api为空''默认为200
                //console.log(api)
                var arrApi = api.split(':');


                if (arrApi[0] != 'http' && arrApi[0] != 'https') {

                    api = HOST + api
                }
                //改url防止缓存
                if (extraOptions && extraOptions.cache == false) {
                    //console.info(extraOptions);
                    options.params.thisTime = +new Date().getTime();
                } else {
                    delete options.params['thisTime'];
                }

                $.extend(true, options, extraOptions);


                return new Promise(function (resolve, reject) {

                        $http({
                            url: api,
                            method: isEmptyObject(options.type) ? "GET" : options.type,//默认请求方式为GET
                            cache: options.cache?options.cache:true,//数据缓存
                            params: options.params,
                            data: options.data,//上传文件必须用data
                            headers: {"Content-Type": undefined} //angularjs 在发送 POST 请求的时候使用的默认 Content-Type 是 application/json，因此此处需要调整为 undefined，这时浏览器会自动的帮我们设置成 multipart/form-data 的编码方式，同时还会生成一个合适的 boundary，如果手动设置成 multipart/form-data 的话就不会生成 boundary 字段了。
                            //headers: {"Cookie": "jsessionid=lll"  }
                        }).success(function (data) {
                                if (data && (data.code == statusCODE.OK || data.status == '000000')) {
                                    resolve(data.data);
                                }
                                else if (data.code == statusCODE.NOTLOGIN) {
                                    $timeout(function () {
                                        if (ipCookie('user'))
                                            modalService.mainMsgLogin('登录已过期，请重新登录');
                                        else
                                            modalService.mainMsgLogin('请先登录账号！');
                                        $init.cleanCookies();
                                    });
                                } else {
                                    //console.error(data);
                                    reject(data);
                                }
                            }
                        ).
                            error(function (e) {
                                //console.info(e);
                                if (e) {
                                    //modalService.mainMsgError(e.msg);
                                } else {
                                    //alert('访问服务器异常：无此访问接口或无法获得服务器数据');
                                }
                            });

                    }
                )
                    ;
            }
        }
            ;
//判断是否对象为空
        function isEmptyObject(o) {
            for (var n in o) {
                return false;
            }
            return true;
        }

    }])
;